package com.example.ymm.modules1.service.dd.iot;

import com.example.ymm.util.RedisUtil;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

/**
 * @author zeymo
 */
@Slf4j
@Service
public class IotAccessTokenService {

    @Autowired
    RedisUtil redisUtil;


    @Value("${iot.domain}")
    private String domain;



    private volatile AccessToken accessToken;

    @Getter
    @Setter
    static class AccessToken {
        private String accessToken;
        private Long expireTimestamp;
    }




//
//    public synchronized String getAccessToken(){
//        String getUrlToken=null;
//        try{
//            String tokenKey = RedisKeyManager.dd_mini_access_token;
//            String lockKey = RedisKeyManager.dd_mini_access_lock;
//            if(!redisUtil.hasKey(tokenKey)){
//                boolean isOpen  = redisUtil.setIfAbsent(lockKey,"1",1000L, TimeUnit.SECONDS);
//                if(isOpen){
//                    getUrlToken=refreshAccessToken();
//                    redisUtil.set(tokenKey,getUrlToken,7000L);
//                    return getUrlToken;
//                }else{
//                  //  Thread.sleep(1100L);//休眠等待执行
//                    if(!redisUtil.hasKey(tokenKey)){
//                        isOpen  = redisUtil.setIfAbsent(lockKey,"1",2L, TimeUnit.SECONDS);
//                        if(isOpen){
//                            getUrlToken=refreshAccessToken();
//                            redisUtil.set(tokenKey,getUrlToken,7000L);
//                            return getUrlToken;
//                        }else{
//                            redisUtil.remove(tokenKey);
//                            getUrlToken=refreshAccessToken();
//                            redisUtil.set(tokenKey,getUrlToken,7000L);
//                            return getUrlToken;
//                        }
//                    }else{
//                        return redisUtil.getString(tokenKey);
//                    }
//                }
//            }else{
//                return  redisUtil.getString(tokenKey);
//            }
//        }catch (Exception e){
//            return null;
//        }
//    }
//
//    private String refreshAccessToken() {
//
//
//        GetAccessTokenRequest getAccessTokenRequest = new GetAccessTokenRequest()
//                .setAppKey(appKey)
//                .setAppSecret(appSecret);
//        try {
//            GetAccessTokenResponse getAccessTokenResponse = auth2Client.getAccessToken(getAccessTokenRequest);
//            if (Objects.isNull(getAccessTokenResponse) || Objects.isNull(getAccessTokenResponse.body)) {
//                log.error("AccessTokenService_getTokenFromRemoteServer getAccessToken return error," +
//                        " response={}", getAccessTokenResponse);
//                EmailUtil.sendEmail("1055162826@qq.com","获取dd token异常 response 为空:",getAccessTokenResponse.toString());
//
//                return null;
//            }
//
//            GetAccessTokenResponseBody body = getAccessTokenResponse.body;
//            if (Objects.isNull(body.accessToken) || Objects.isNull(body.expireIn)) {
//                log.error("AccessTokenService_getTokenFromRemoteServer getAccessToken invalid token, token or expireIn" +
//                        " maybe null, accessToken={}, expireIn={}", body.accessToken, body.expireIn);
//                EmailUtil.sendEmail("1055162826@qq.com","获取dd token异常 body 为空:",body.toString());
//
//                return null;
//            }
//
//            AccessToken accessToken = new AccessToken();
//            accessToken.setAccessToken(body.accessToken);
//            accessToken.setExpireTimestamp(System.currentTimeMillis() + body.expireIn * 1000);
//            this.accessToken = accessToken;
//            log.info("refresh access token success, expireIn={}", body.expireIn);
//            return body.accessToken;
//        } catch (TeaException e) {
//            log.error("AccessTokenService_getTokenFromRemoteServer getAccessToken throw " +
//                    "TeaException, errCode={}, errorMessage={}", e.getCode(), e.getMessage(), e);
//            EmailUtil.sendEmail("1055162826@qq.com","获取dd token异常errCode:"+e.getCode(),e.getMessage());
//            return null;
//        } catch (Exception e) {
//            log.error("AccessTokenService_getTokenFromRemoteServer getAccessToken throw Exception", e);
//            EmailUtil.sendEmail("1055162826@qq.com","获取dd_异常token:",e.getMessage());
//            return null;
//        }
//    }



}
